﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Presentacion.Contrato.Plantillas;
using Sistema_Totem.Logica.Comandos.ComandoPlantilla;
using Sistema_Totem.Clases;
using Sistema_Totem.Clases.Fabricas;
using System.Web.UI.WebControls;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos;
using AjaxControlToolkit;
using System.Web.UI;

namespace Sistema_Totem.Presentacion.Presentador.Plantillas
{
    public class PresentadorAgregarPlantillaPasoTres
    {
        private IContratoAgregarPlantillaPasoTres _vista;
        private Entidad _generico;
        private Comando<Entidad> _comando;

        public PresentadorAgregarPlantillaPasoTres(IContratoAgregarPlantillaPasoTres vista) 
        {
            _vista = vista;
        }
        /// <summary>
        /// Metodo que inicializa el tipo generico con la entidad que es pasada por referencia
        /// </summary>
        /// <param name="generico">Retorna un objeto que tiene la entidad creada en la pagina anterior</param>
        public void IniciarVista(Entidad generico)
        {
            _generico = generico;
        }

        /// <summary>
        /// Este metodo carga todos los componentes 
        /// </summary>
        public void ActualizarVista()
        {
            AccordionPane accordion;
            int l = 0;
            String[] componentes = { "TextBox", "CheckBox", "DropDownList", "CheckBoxList" };
            String[] estados = { "ACTIVADO", "DESACTIVADO", "OBLIGATORIO" };

            for (int j = 0; j < (_generico as Plantilla).ListaSeccion.Count; j++)
            {
                accordion = new AccordionPane();
                accordion.HeaderContainer.Controls.Add(new LiteralControl((_generico as Plantilla).ListaSeccion[j].Nombre.ToString()));
                accordion.HeaderContainer.ID = (_generico as Plantilla).ListaSeccion[j].Nombre.ToString() + j;
                accordion.ID = "AcordionPane" + j;

                Label AuxLabel = new Label();
                AuxLabel.Text = "Nombre del elemento ";
                AuxLabel.Width = 160;
                accordion.ContentContainer.Controls.Add(AuxLabel);

                Label AuxLabel2 = new Label();
                AuxLabel2.Text = "Tipo";
                AuxLabel2.Width = 105;
                accordion.ContentContainer.Controls.Add(AuxLabel2);

                Label AuxLabel3 = new Label();
                AuxLabel3.Text = " Estado";
                AuxLabel3.Width = 90;
                accordion.ContentContainer.Controls.Add(AuxLabel3);

                Label AuxLabel4 = new Label();
                AuxLabel4.Text = " Validaciones";
                AuxLabel4.Width = 200;
                accordion.ContentContainer.Controls.Add(AuxLabel4);


                for (int i = 0; i < (_generico as Plantilla).ListaSeccion[j].ListaControl.Count; i++)
                {
                    accordion.ContentContainer.ID = "Elemento " + l;                    

                    TextBox texto = new TextBox();
                    texto.Width = 150;
                    texto.ID = "TextBoxN/" + l;
                    texto.Rows = 1;
                    texto.Columns = 70;
                    texto.MaxLength = 20;
                    accordion.ContentContainer.Controls.Add(texto);

                    RequiredFieldValidator validate = new RequiredFieldValidator();
                    validate.ID = "validN" + l;
                    validate.ControlToValidate = texto.ID;
                    validate.ErrorMessage = "*";
                    validate.ForeColor = System.Drawing.Color.Red;
                    validate.Display = ValidatorDisplay.Static;
                    validate.Width = 5;
                    accordion.ContentContainer.Controls.Add(validate);                 

                    DropDownList combo = new DropDownList();
                    combo.Width = 100;
                    combo.ID = "DropdownT/" + l;
                    combo.DataSource = componentes;
                    combo.DataBind();
                    accordion.ContentContainer.Controls.Add(combo);                        

                    DropDownList combo1 = new DropDownList();
                    combo1.Width = 100;
                    combo1.ID = "DropdownE/" + l;
                    combo1.DataSource = estados;
                    combo1.DataBind();
                    accordion.ContentContainer.Controls.Add(combo1);

                    CheckBox check1 = new CheckBox();
                    check1.Text = "No nulo";
                    check1.Width = 80;
                    check1.ID = "uno" + l;
                    accordion.ContentContainer.Controls.Add(check1);

                    CheckBox check2 = new CheckBox();
                    check2.Text = "Alfanumerico";
                    check2.Width = 100;
                    check1.ID = "dos" + l;
                    accordion.ContentContainer.Controls.Add(check2);

                    CheckBox check3 = new CheckBox();
                    check3.Text = "Multilinea";
                    check3.Width = 80;
                    check3.ID = "tres" + l;
                    accordion.ContentContainer.Controls.Add(check3);

                    TextBox textoC = new TextBox();
                    textoC.Width = 605;
                    textoC.ID = "TextBoxC/" + l;
                    textoC.Rows = 1;
                    textoC.Columns = 70;
                    textoC.MaxLength = 100;
                    textoC.Text = "Contenido aqui";
                    textoC.ForeColor = System.Drawing.Color.Blue;
                    textoC.TextMode = TextBoxMode.MultiLine;
                    textoC.Wrap = true;
                    accordion.ContentContainer.Controls.Add(textoC);

                    RequiredFieldValidator validateC = new RequiredFieldValidator();
                    validateC.ID = "validC" + l;
                    validateC.ControlToValidate = textoC.ID;
                    validateC.ErrorMessage = "*";
                    validateC.ForeColor = System.Drawing.Color.Red;
                    validateC.Display = ValidatorDisplay.Static;
                    validateC.Width = 5;
                    accordion.ContentContainer.Controls.Add(validateC);  

                    l++;
                }
                _vista.AccordionCtrl.Panes.Add(accordion);
            }
        }

        /// <summary>
        /// Primero llama a un comando que le asigna el nombre, tipo, estado y validaciones de cada elemento y llama a otro comando agregar plantilla que arma el xml y luego llama al dao para guardarlo en base de datos
        /// </summary>
        /// <returns></returns>
        public Entidad _Ejecutar()
        {
            _comando  = FabricaComando.CrearComandoAgregarPlantillaPasoTres(_vista.AccordionCtrl,_generico);
            _generico = _comando.Ejecutar();
            _comando = FabricaComando.CrearComandoAgregarPlantilla(_generico);
            return _comando.Ejecutar();
        }

    }
}